home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Personal Computer World 2005 October
/
PCWOCT05.iso
/
Software
/
FromTheMag
/
XAMPP 1.4.14
/
xampp-win32-1.4.14-installer.exe
/
xampp
/
php
/
pear
/
Net
/
DNS.php
< prev
next >
Wrap
PHP Script
|
2004-03-24
|
15KB
|
504 lines
<?php
/*
* Module written/ported by Eric Kilfoil <eric@ypass.net>
*
* This is the copyright notice from the PERL Net::DNS module:
*
* Copyright (c) 1997-2000 Michael Fuhr. All rights reserved. This
* program is free software; you can redistribute it and/or modify it
* under the same terms as Perl itself.
*
* The majority of this is _NOT_ my code. I simply ported it from the
* PERL Net::DNS module.
*
* The author of the Net::DNS module is Michael Fuhr <mike@fuhr.org>
* http://www.fuhr.org/~mfuhr/perldns/
*
* I _DO_ maintain this code, and Miachael Fuhr has nothing to with the
* porting of this code to PHP. Any questions directly related to this
* class library should be directed to me.
*
* I'll be setting up a CVS repository for this class soon. The more
* emails i get concerning this, the more apt i am to do it.
*
* License Information:
*
* Net_DNS: A resolver library for PHP
* Copyright (C) 2002 Eric Kilfoil eric@ypass.net
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/* Include information {{{ */
$phpdns_basedir = "Net";
require_once("$phpdns_basedir/DNS/Header.php");
require_once("$phpdns_basedir/DNS/Question.php");
require_once("$phpdns_basedir/DNS/Packet.php");
require_once("$phpdns_basedir/DNS/Resolver.php");
require_once("$phpdns_basedir/DNS/RR.php");
/* }}} */
/* GLOBAL VARIABLE definitions {{{ */
// Used by the Net_DNS_Resolver object to generate an ID
mt_srand((double) microtime() * 10000);
$_Net_DNS_packet_id = (int)mt_rand(0, 65535);
/* }}} */
/* Net_DNS object definition (incomplete) {{{ */
/**
* Initializes a resolver object
*
* Net_DNS allows you to query a nameserver for DNS lookups. It bypasses the
* system resolver library entirely, which allows you to query any nameserver,
* set your own values for retries, timeouts, recursion, etc.
*
* @author Eric Kilfoil <eric@ypass.net>
* @package Net_DNS
* @version 0.01alpha
*/
class Net_DNS
{
/* class variable definitions {{{ */
/**
* A default resolver object created on instantiation
*
* @var object Net_DNS_Resolver
*/
var $resolver;
var $VERSION = "0.01";
var $PACKETSZ = 512;
var $HFIXEDSZ = 12;
var $QFIXEDSZ = 4;
var $RRFIXEDSZ = 10;
var $INT32SZ = 4;
var $INT16SZ = 2;
/* }}} */
/* class constructor - Net_DNS() {{{ */
/**
* Initializes a resolver object
*
* @see Net_DNS_Resolver
*/
function Net_DNS()
{
$this->resolver = new Net_DNS_Resolver();
}
/* }}} */
/* Net_DNS::opcodesbyname() {{{ */
/**
* Translates opcode names to integers
*
* Translates the name of a DNS OPCODE into it's assigned number
* listed in RFC1035, RFC1996, or RFC2136. Valid OPCODES are:
* <ul>
* <li>QUERY
* <li>IQUERY
* <li>STATUS
* <li>NS_NOTIFY_OP
* <li>UPDATE
* <ul>
*
* @param string $opcode A DNS Packet OPCODE name
* @return integer The integer value of an OPCODE
* @see Net_DNS::opcodesbyval()
*/
function opcodesbyname($opcode)
{
$op = array(
"QUERY" => 0, // RFC 1035
"IQUERY" => 1, // RFC 1035
"STATUS" => 2, // RFC 1035
"NS_NOTIFY_OP" => 4, // RFC 1996
"UPDATE" => 5, // RFC 2136
);
if (! strlen($op[$opcode])) {
$op[$opcode] = NULL;
}
return($op[$opcode]);
}
/* }}} */
/* Net_DNS::opcodesbyval() {{{*/
/**
* Translates opcode integers into names
*
* Translates the integer value of an opcode into it's name
*
* @param integer $opcodeval A DNS packet opcode integer
* @return string The name of the OPCODE
* @see Net_DNS::opcodesbyname()
*/
function opcodesbyval($opcodeval)
{
$opval = array(
0 => "QUERY",
1 => "IQUERY",
2 => "STATUS",
4 => "NS_NOTIFY_OP",
5 => "UPDATE",
);
if (! strlen($opval[$opcodeval])) {
$opval[$opcodeval] = NULL;
}
return($opval[$opcodeval]);
}
/*}}}*/
/* Net_DNS::rcodesbyname() {{{*/
/**
* Translates rcode names to integers
*
* Translates the name of a DNS RCODE (result code) into it's assigned number.
* <ul>
* <li>NOERROR
* <li>FORMERR
* <li>SERVFAIL
* <li>NXDOMAIN
* <li>NOTIMP
* <li>REFUSED
* <li>YXDOMAIN
* <li>YXRRSET
* <li>NXRRSET
* <li>NOTAUTH
* <li>NOTZONE
* <ul>
*
* @param string $rcode A DNS Packet RCODE name
* @return integer The integer value of an RCODE
* @see Net_DNS::rcodesbyval()
*/
function rcodesbyname($rcode)
{
$rc = array(
"NOERROR" => 0, // RFC 1035
"FORMERR" => 1, // RFC 1035
"SERVFAIL" => 2, // RFC 1035
"NXDOMAIN" => 3, // RFC 1035
"NOTIMP" => 4, // RFC 1035
"REFUSED" => 5, // RFC 1035
"YXDOMAIN" => 6, // RFC 2136
"YXRRSET" => 7, // RFC 2136
"NXRRSET" => 8, // RFC 2136
"NOTAUTH" => 9, // RFC 2136
"NOTZONE" => 10, // RFC 2136
);
if (! strlen($rc[$rcode])) {
$rc[$rcode] = NULL;
}
return($rc[$rcode]);
}
/*}}}*/
/* Net_DNS::rcodesbyval() {{{*/
/**
* Translates rcode integers into names
*
* Translates the integer value of an rcode into it's name
*
* @param integer $rcodeval A DNS packet rcode integer
* @return string The name of the RCODE
* @see Net_DNS::rcodesbyname()
*/
function rcodesbyval($rcodeval)
{
$rc = array(
0 => "NOERROR",
1 => "FORMERR",
2 => "SERVFAIL",
3 => "NXDOMAIN",
4 => "NOTIMP",
5 => "REFUSED",
6 => "YXDOMAIN",
7 => "YXRRSET",
8 => "NXRRSET",
9 => "NOTAUTH",
10 => "NOTZONE",
);
if (! strlen($rc[$rcodeval])) {
$rc[$rcodeval] = NULL;
}
return($rc[$rcodeval]);
}
/*}}}*/
/* Net_DNS::typesbyname() {{{*/
/**
* Translates RR type names into integers
*
* Translates a Resource Record from it's name to it's integer value.
* Valid resource record types are:
*
* <ul>
* <li>A
* <li>NS
* <li>MD
* <li>MF
* <li>CNAME
* <li>SOA
* <li>MB
* <li>MG
* <li>MR
* <li>NULL
* <li>WKS
* <li>PTR
* <li>HINFO
* <li>MINFO
* <li>MX
* <li>TXT
* <li>RP
* <li>AFSDB
* <li>X25
* <li>ISDN
* <li>RT
* <li>NSAP
* <li>NSAP_PTR
* <li>SIG
* <li>KEY
* <li>PX
* <li>GPOS
* <li>AAAA
* <li>LOC
* <li>NXT
* <li>EID
* <li>NIMLOC
* <li>SRV
* <li>ATMA
* <li>NAPTR
* <li>TSIG
* <li>UINFO
* <li>UID
* <li>GID
* <li>UNSPEC
* <li>IXFR
* <li>AXFR
* <li>MAILB
* <li>MAILA
* <li>ANY
* <ul>
*
* @param string $rrtype A DNS packet RR type name
* @return integer The integer value of an RR type
* @see Net_DNS::typesbyval()
*/
function typesbyname($rrtype)
{
$rc = array(
"A" => 1,
"NS" => 2,
"MD" => 3,
"MF" => 4,
"CNAME" => 5,
"SOA" => 6,
"MB" => 7,
"MG" => 8,
"MR" => 9,
"NULL" => 10,
"WKS" => 11,
"PTR" => 12,
"HINFO" => 13,
"MINFO" => 14,
"MX" => 15,
"TXT" => 16,
"RP" => 17,
"AFSDB" => 18,
"X25" => 19,
"ISDN" => 20,
"RT" => 21,
"NSAP" => 22,
"NSAP_PTR" => 23,
"SIG" => 24,
"KEY" => 25,
"PX" => 26,
"GPOS" => 27,
"AAAA" => 28,
"LOC" => 29,
"NXT" => 30,
"EID" => 31,
"NIMLOC" => 32,
"SRV" => 33,
"ATMA" => 34,
"NAPTR" => 35,
"UINFO" => 100,
"UID" => 101,
"GID" => 102,
"UNSPEC" => 103,
"TSIG" => 250,
"IXFR" => 251,
"AXFR" => 252,
"MAILB" => 253,
"MAILA" => 254,
"ANY" => 255,
);
if (! strlen($rc[$rrtype])) {
$rc[$rrtype] = NULL;
}
return($rc[$rrtype]);
}
/*}}}*/
/* Net_DNS::typesbyval() {{{*/
/**
* Translates RR type integers into names
*
* Translates the integer value of an RR type into it's name
*
* @param integer $rrtypeval A DNS packet RR type integer
* @return string The name of the RR type
* @see Net_DNS::typesbyname()
*/
function typesbyval($rrtypeval)
{
$rc = array(
1 => "A",
2 => "NS",
3 => "MD",
4 => "MF",
5 => "CNAME",
6 => "SOA",
7 => "MB",
8 => "MG",
9 => "MR",
10 => "NULL",
11 => "WKS",
12 => "PTR",
13 => "HINFO",
14 => "MINFO",
15 => "MX",
16 => "TXT",
17 => "RP",
18 => "AFSDB",
19 => "X25",
20 => "ISDN",
21 => "RT",
22 => "NSAP",
23 => "NSAP_PTR",
24 => "SIG",
25 => "KEY",
26 => "PX",
27 => "GPOS",
28 => "AAAA",
29 => "LOC",
30 => "NXT",
31 => "EID",
32 => "NIMLOC",
33 => "SRV",
34 => "ATMA",
35 => "NAPTR",
100 => "UINFO",
101 => "UID",
102 => "GID",
103 => "UNSPEC",
250 => "TSIG",
251 => "IXFR",
252 => "AXFR",
253 => "MAILB",
254 => "MAILA",
255 => "ANY",
);
if (! strlen($rc[$rrtypeval])) {
$rc[$rrtypeval] = NULL;
}
return($rc[$rrtypeval]);
}
/*}}}*/
/* Net_DNS::classesbyname() {{{*/
/**
* translates a DNS class from it's name to it's integer value. Valid
* class names are:
* <ul>
* <li>IN
* <li>CH
* <li>HS
* <li>NONE
* <li>ANY
* </ul>
*
* @param string $class A DNS packet class type
* @return integer The integer value of an class type
* @see Net_DNS::classesbyval()
*/
function classesbyname($class)
{
$rc = array(
"IN" => 1,
"CH" => 3,
"HS" => 4,
"NONE" => 254,
"ANY" => 255
);
if (! strlen($rc[$class])) {
$rc[$class] = NULL;
}
return($rc[$class]);
}
/*}}}*/
/* Net_DNS::classesbyval() {{{*/
/**
* Translates RR class integers into names
*
* Translates the integer value of an RR class into it's name
*
* @param integer $classval A DNS packet RR class integer
* @return string The name of the RR class
* @see Net_DNS::classesbyname()
*/
function classesbyval($classval)
{
$rc = array(
1 => "IN",
3 => "CH",
4 => "HS",
254 => "NONE",
255 => "ANY"
);
if (! strlen($rc[$classval])) {
$rc[$classval] = NULL;
}
return($rc[$classval]);
}
/*}}}*/
/* not completed - Net_DNS::mx() {{{*/
/*}}}*/
/* not completed - Net_DNS::yxrrset() {{{*/
/*}}}*/
/* not completed - Net_DNS::nxrrset() {{{*/
/*}}}*/
/* not completed - Net_DNS::yxdomain() {{{*/
/*}}}*/
/* not completed - Net_DNS::nxdomain() {{{*/
/*}}}*/
/* not completed - Net_DNS::rr_add() {{{*/
/*}}}*/
/* not completed - Net_DNS::rr_del() {{{*/
/*}}}*/
}
/* }}} */
/* VIM Settings {{{
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* soft-stop-width: 4
* c indent on
* End:
* vim600: sw=4 ts=4 sts=4 cindent fdm=marker et
* vim<600: sw=4 ts=4
* }}} */
?>